const isArray = function (obj: any): boolean {
  return Object.prototype.toString.call(obj) === '[object Array]'
}

const Logger = () => {}

Logger.typeColor = function (type: string) {
  let color = ''
  switch (type) {
    case 'primary':
      color = '#2d8cf0'
      break
    case 'success':
      color = '#19be6b'
      break
    case 'info':
      color = '#909399'
      break
    case 'warn':
      color = '#ff9900'
      break
    case 'error':
      color = '#f03f14'
      break
    default:
      color = '#35495E'
      break
  }
  return color
}

Logger.print = function (type = 'default', text: any, back = false) {
  if (typeof text === 'object') {
    // 如果是對象則調用打印對象方式
    isArray(text) ? console.table(text) : console.dir(text)
    return
  }
  if (back) {
    // 如果是打印帶背景圖的
    console.log(
      `%c ${text} `,
      `background:${Logger.typeColor(type)}; padding: 2px; border-radius: 4px; color: #fff;`
    )
  } else {
    console.log(
      `%c ${text} `,
      `border: 1px solid ${Logger.typeColor(type)};
        padding: 2px; border-radius: 4px;
        color: ${Logger.typeColor(type)};`
    )
  }
}

Logger.printBack = function (type = 'primary', text:string) {
  this.print(type, text, true)
}

// Logger.pretty = function (type = 'primary', title, text) {
//   if (typeof text === 'object') {
//     console.group('Console Group', title)
//     console.log(
//       `%c ${title}`,
//       `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
//         padding: 1px; border-radius: 4px; color: #fff;`
//     )
//     isArray(text) ? console.table(text) : console.dir(text)
//     console.groupEnd()
//     return
//   }
//   console.log(
//     `%c ${title} %c ${text} %c`,
//     `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
//       padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,
//     `border:1px solid ${Logger.typeColor(type)};
//       padding: 1px; border-radius: 0 4px 4px 0; color: ${Logger.typeColor(type)};`,
//     'background:transparent'
//   )
// }

Logger.pretty = function (
  type: 'primary' | 'success' | 'info' | 'warn' | 'error' = 'primary',
  title: string,
  text: any
): void {
  if (typeof text === 'object') {
    console.group(title)
    console.log(
      `%c ${title}`,
      `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
        padding: 1px; border-radius: 4px; color: #fff;`
    )
    isArray(text) ? console.table(text) : console.dir(text)
    console.groupEnd()
    return
  }

  const styles = {
    title: `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
      padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,
    content: `border:1px solid ${Logger.typeColor(type)};
      padding: 1px; border-radius: 0 4px 4px 0; color: ${Logger.typeColor(type)};`
  }

  console.log(`%c ${title} %c ${text} %c`, styles.title, styles.content, 'background:transparent')
}

Logger.prettyPrimary = function (title:string, ...text:any[]) {
  text.forEach((t) => this.pretty('primary', title, t))
}

Logger.prettySuccess = function (title:string, ...text:any[]) {
  text.forEach((t) => this.pretty('success', title, t))
}

Logger.prettyWarn = function (title:string, ...text:any[]) {
  text.forEach((t) => this.pretty('warn', title, t))
}

Logger.prettyError = function (title:string, ...text:any[]) {
  text.forEach((t) => this.pretty('error', title, t))
}

Logger.prettyInfo = function (title:string, ...text:any[]) {
  text.forEach((t) => this.pretty('info', title, t))
}

export default Logger
